package com.shp.dao;

import com.shp.pojo.Purse;
import com.shp.pojo.Recharge;
import com.shp.pojo.Withdrawals;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * Description:
 * 钱包操作
 * @author zwl
 * @version 1.0
 * @date 2020/2/28 13:20
 */
public interface PurseDao {

    /**
     * 根据用户的id，查询钱包
     * @param userId 用户id
     * @return Purse
     */
    public Purse getPurseByUserId(@Param("id") Integer userId);

    /**
     * 初始化钱包
     * @param purse 钱包
     * @return 影响行数
     */
    public int insert(@Param("purse") Purse purse);

    /**
     * 减少用户的钱包的钱数
     * @param userId 用户id
     * @param price 需要减去的钱数
     * @return 影响行数
     */
    public int reduceUserParseByUserId(@Param("id") Integer userId,@Param("price") Float price);

    /**
     * 插入一条充值记录
     * @param recharge1 Recharge
     * @return 影响行数
     */
    public int insertRecharge(@Param("r") Recharge recharge1);

    /**
     * 插入一条体现记录
     * @param withdrawals1 Withdrawals
     * @return 影响行数
     */
    public int insertWithdrawals(@Param("w") Withdrawals withdrawals1);

    /**
     * 根据用户的id，查询最新的充值记录
     * @param userId 用户id
     * @return Recharge
     */
    public Recharge getRechargeByUserIdAndDate(@Param("id")Integer userId);

    /**
     * 根据用户的id，查询最新的提现记录
     * @param userId 用户id
     * @return Withdrawals
     */
    public Withdrawals getWithdrawalsByUserIdAndDate(@Param("id")Integer userId);


    /**
     * 获取所有的钱包记录
     * @return List<Purse>
     */
    public List<Purse> getAllPurse();

    /**
     * 修改钱包的信息
     *
     * @param purse 钱包信息
     * @return 影响行数
     */
    public int update(@Param("purse") Purse purse);

    /**
     * 根据钱包id获取钱包信息
     * @param id 钱包id
     * @return Purse
     */
    public Purse getPurseById(@Param("id") Integer id);

    /**
     * 根据邮箱或者状态查询钱包
     * @param email
     * @param status
     * @return List<Purse>
     */
    public List<Purse> getSelectedPurse(@Param("email") String email, @Param("status") Integer status);

    /**
     * 获取所有的提现记录
     * @return List<Withdrawals>
     */
    public List<Withdrawals> getWithdrawalsList();

    /**
     * 修改提现审核的状态码
     * @param status 状态码
     * @param id 提现id
     * @return 修改成功影响行数
     */
    public int updateWithdrawalsStatus(@Param("status") int status,@Param("id") int id);

    /**
     * 提现选择分页
     *
     * @param email  用户邮箱
     * @param status 用户提现的状态
     * @return List<Withdrawals>
     */
    public List<Withdrawals> getSelectedWithdrawals(@Param("email") String email, @Param("status") Byte status);

    /**
     * 批量删除提现记录
     *
     * @param ids id列表
     * @return true代表删除成功；否则删除失败
     */
    public int deleteWithdrawalsBatch(@Param("ids") Integer[] ids);

    /**
     * 获取所有充值记录，便于分页
     * @return  List<Recharge>
     */
    public List<Recharge> getRechargeList();

    /**
     * 修改充值审核的状态码
     * @param status 状态码
     * @param id 充值id
     * @return 修改成功影响行数
     */
    public int updateRechargeStatus(@Param("status") int status, @Param("id") int id);

    /**
     * 充值选择分页
     * @param email 用户邮箱
     * @param status 状态码
     * @return List<Recharge>
     */
    public List<Recharge> getSelectedRecharge(@Param("email") String email, @Param("status") Byte status);

    /**
     * 批量删除充值记录
     * @param ids id列表
     * @return true代表删除成功；否则代表删除失败
     */
    public int deleteRechargeBatch(@Param("ids") Integer[] ids);
}
